昨天的 Day 24,我們學習了如何閱讀程式的使用說明,並透過 --giveflag 這個參數,讓程式正確執行。
今天則要再往前一步。有些命令列參數不只是告訴程式要執行什麼功能,還需要額外提供一個值,讓程式知道要處理哪個目標。
例如,我們之前學過的 find 其中 -name 後面還需要提供 flag,才能指定要搜尋的檔案名稱。
今天的題目就是要理解這種用法,並利用 /challenge/challenge 提供的功能讀取真正的 Flag。
一般來說,執行程式時可以在後面加上參數,改變程式的執行方式。
例如 ls -a 這裡的 -a 是參數,會讓 ls 顯示隱藏檔案。
但有些參數還需要額外的值。
例如 find / -name flag
可以拆解成
| 部分 | 功能 |
|---|---|
find |
執行搜尋 |
/ |
指定搜尋起點為根目錄 |
-name |
指定以名稱作為搜尋條件 |
flag |
指定要尋找的名稱 |
因此,-name 後面的 flag 就是提供給該參數的值。
今天要學習的概念也是一樣,有些參數需要額外的資訊,才能完成指定的功能。
題目:Learning Complex Usage
題目提供的程式是 /challenge/challenge
根據題目文件,這個程式支援 --printfile 參數,可以將指定檔案的內容輸出到終端機。
例如,題目提供的範例 /challenge/challenge --printfile /etc/hostname
這個指令會讀取 /etc/hostname,並將內容印出來。
我們可以把它拆成三個部分
/challenge/challenge → 要執行的程式
--printfile → 指定要輸出檔案內容
/etc/hostname → 要讀取的檔案路徑
這次的重點就在於,--printfile 後面還需要提供一個檔案路徑。
如果沒有指定目標,程式就無法知道我們想讀取哪個檔案。
今天的題目要求我們取得 /flag 的內容。
而程式已經提供了讀取檔案的功能,因此不需要另外撰寫程式,也不需要修改檔案。
只要把 /flag 當成 --printfile 的參數值即可。
指令如下
程式成功取得 Flag!
這代表我們不只正確提供了 --printfile 參數,也成功指定了要讀取的檔案路徑。
這個指令可以理解成
執行 /challenge/challenge
↓
接收 --printfile 參數
↓
取得指定路徑 /flag
↓
讀取檔案並輸出內容
這代表我們不只正確提供了 --printfile 參數,也成功指定了要讀取的檔案路徑。
今天的題目延續了昨天的命令列參數概念,讓我進一步理解到,有些參數本身還需要額外的值。以今天的 --printfile 為例,光是提供參數還不夠,還必須告訴程式要讀取哪個檔案。這也讓我重新注意到閱讀文件的重要性。當我們使用不熟悉的程式時,如果只靠猜測參數,很容易忽略程式真正需要的資訊;相反地,先閱讀文件,就能更清楚地理解正確的使用方式。這個觀念不只適用於 pwn.college,也適用於未來使用 Linux 系統工具、資安分析工具,以及其他需要透過命令列操作的程式。